package com.kingwang.training.designpattern.templatemethod.bo;

/**
 * @author King
 */
public abstract class BankService {
    /**
     * 银行业务处理方法
     * 该方法为模板方法
     */
    public void service() {
        String sequenceNumber = getSequenceNumber();

        String serviceWindowNumber = waitServiceWindow(sequenceNumber);

        doService(serviceWindowNumber);

        submitServiceRank(serviceWindowNumber);
    }

    /**
     * 评价服务满意度
     */
    private void submitServiceRank(String serviceWindowNumber) {
        System.out.println("评价服务满意度");
    }

    /**
     * 具体的业务在子类中确定
     * 该方法为功能扩展点
     */
    protected abstract void doService(String serviceWindowNumber);

    /**
     * 获取排队号
     *
     * @return
     */
    private String getSequenceNumber() {
        System.out.println("获取排队号");

        return "A11";
    }

    /**
     * 等待服务窗口叫号
     *
     * @param sequenceNumber
     */
    private String waitServiceWindow(String sequenceNumber) {
        System.out.println("等待服务窗口叫号");

        return "3";
    }
}
